import { config } from '../config.js';

function getToken() {
  const token = wx.getStorageSync('token');
  return token;
}

class HTTP {
  constructor() {}

  request({url, data, method="GET"}){
    return new Promise((resolve,reject)=>{
      wx.request({
        url: config.api_base_url + url,
        data: data,
        method: method,
        header:{
          'content-type': 'application/json',
          token: getToken()
        },
        success: res => {
          if (res.statusCode.toString().startsWith('2')) {
            if (res.data.returnCode == 807) {
              resolve(res.data);
            } else if (res.data.returnCode != '0000') {
              reject();
              url != '/api/authorization' && _show_error(res.data.returnMessage);
            } else {
              resolve(res.data)
            }
          } else if (res.statusCode == 403) {  // 登录失效当做正确抛出
            resolve(res.data)
          }
          else {
            reject()
            _show_error(res.data.returnMessage);
          }  
          resolve();
        },
        fail: (err) => {
          _show_error('请求报错了！');
          reject()
        }
      })
    })
  }

  upload({url, filePath}){
    return new Promise((resolve,reject)=>{
      wx.uploadFile({
        url: config.api_base_url + url,
        filePath,
        name: 'file',  
        header: {
          'content-type': 'multipart/form-data',
          token: _encode()
        },
        success: res => {
          if (res.statusCode.toString().startsWith('2')) {
            const data = JSON.parse(res.data);
            if (data.returnCode != '0000') {
              reject()
              _show_error(data.returnMessage);
            } else {
              resolve(data)
            }
          } else {
            const data = JSON.parse(res.data);
            _show_error(data);
            reject();
          }  
        },
        fail: (err) => {
          _show_error(1)
          reject() 
        }
      })
    })
  }
}

const _show_error = (text) => { //代表私有方法
  wx.showToast({
    title: text,
    icon: 'none',
    duration: 2000
  })
}

export { HTTP };